import {getSystem,userRole,role} from '@/api/news.js'
import  {defaultRouterMap,asyncRouterMap} from '@/router'

function hasPremit(role,router){
	if(router.meta && router.meta.role){
		return role.some(item=>router.meta.role.indexOf(item)>=0)
	}
}
function handleChildren(role,item){
	if(item.children && item.children.length>0){
		item.children = item.children.filter(itm=>{
			if(itm.children && itm.children.length>0){
				handleChildren(role,item)
			}
		 return hasPremit(role,itm) && item
		})
	}
}



const state =()=>{
	return {
		roles:[], //从后台获取的
		addRouter:[] ,// 根据后台对应需要添加的动态路由 
		allRouter:defaultRouterMap ,//最终处理后的路由 ---默认为初始路由
	}
}
const getters = {
	
}
const mutations = {
	HANDLD_ROUTER(state,data){
		state.addRouter = data 
		state.allRouter = state.allRouter.concat(data)
	},
	// 退出时需要清空roles
	CLEAR_ROUTER(state){
		state.roles = [ ]
	}
		
}
const actions = {
	// 获取用户角色
	getSystem({state}){
		return new Promise(async (resolve,reject)=>{
			
			// const res = await getSystem() //普通的用户 -- 系统权限
			

			const res = await userRole()          //最先拿个返回的是超级管理员 其次返回的是普通用户角色权限---角色权限  
			// console.log(res.data)

			if(Array.isArray(res.data)){   //应该在mutations里面改 我闲太麻烦了 
				state.roles =res.data.map(item=>item.role) //处理成一维数组
			}else {
				state.roles = res.data.role
			}
			resolve(state.roles)
		})
	},
	// 创建路由
	createRouter({state,commit}){
		return new Promise(async (resolve,reject)=>{
			let addRouter = [] 

			if(state.roles.includes('admin')){ //超级管理员 
				addRouter = asyncRouterMap
			}else{
				let role =state.roles
				// 根据条件拿到筛选动态路由 
				// includes只能处理一维数组 
				// addRouter =asyncRouterMap.filter(item=>role.includes(item.meta.system)&&item) //对应系统权限处理方法 
				addRouter =asyncRouterMap.filter(item=>{
					if(hasPremit(role,item)){//第一层
					// 第二层
					handleChildren(role,item)
					return item
					}
				})
			}
			
			commit('HANDLD_ROUTER',addRouter)
			resolve()
			})
	   }
	  
}



export default {
	namespaced:true,
	state,
	getters,
	mutations,
	actions
}